package com.hcss.common.redis.base;

import org.springframework.data.redis.core.SetOperations;

import java.util.Set;

/**
 * @描述: Set类型RedisTemplate Dao层接口
 * @作者: xuqian
 * @创建日期: 2018-08-07 11:55
 * @公司 浙江鸿程计算机系统有限公司
 */
public interface RedisSetDao<T> extends BaseRedisDao<T> {
    /**
     * 获取当前操作SetOperations
     * @return
     */
    SetOperations getSetOperations();

    /**
     * 插入数据
     * @param key key值
     * @param values 不定长数据
     */
    void insert(String key, T... values);

    /**
     * 获取全部数据集合
     * @param key key值
     * @return
     */
    Set<T> selectAll(String key);

    /**
     * key对应集合是否包含value
     * @param key key值
     * @param value 要判断的数据
     * @return
     */
    boolean contains(String key, T value);

    /**
     * 删除指定元素
     * @param key key值
     * @param values 不定长 要删除的数据
     */
    void delete(String key, T... values);

    /**
     * 删除全部
     * @param key key值
     */
    void deleteAll(String key);

    /**
     * 获取差集，返回去除相同部分的Key1数据
     * @param key1 key1
     * @param key2 key2
     * @return
     */
    Set<T> getDiff(String key1, String key2);

    /**
     * 获取差集保存到key3中，返回去除相同部分的Key1数据
     * @param key1 key1
     * @param key2 key2
     * @param key3 差集保存的key
     * @return
     */
    Set<T> getDiffAndStore(String key1, String key2, String key3);

    /**
     * 获取交集，并返回
     * @param key1 key1
     * @param key2 key2
     * @return
     */
    Set<T> getInter(String key1, String key2);

    /**
     * 获取交集，保存到key3 并返回
     * @param key1 key1
     * @param key2 key2
     * @param key3 交集要保存的key
     * @return
     */
    Set<T> getInterAndStore(String key1, String key2, String key3);

    /**
     * 获取并集，并返回
     * @param key1 key1
     * @param key2 key2
     * @return
     */
    Set<T> getUnion(String key1, String key2);

    /**
     * 获取并集，保存到key3 并返回
     * @param key1 key1
     * @param key2 key2
     * @param key3 并集要保存的key
     * @return
     */
    Set<T> getUnionAndStore(String key1, String key2, String key3);
}
